﻿Public Class EczIlacListesi : Inherits Process

	Public Overrides Sub GenericEvent(ByVal e As ProcessEventArgs)
		Select Case e.EventType
			Case EventType.Initialize
				Start("İlaç tanımları", "İlaç listesi")
				AddList()
				List.AddColumns("ilactkod(Kod;60c),ilactadi(İlaç adı;100%l),ilacfkod(F.Kod;60c),ilacfadi(Etken madde;100%l),fiyat(Fiyat;60m)")
				List.AddButtons("Add.Edit.-.Print")
			Case EventType.Shown
				Rs = Saglik.Ilac.Liste(Remote)
				List.DataSource = Rs
			Case EventType.Add
				ShowDialog("add")
			Case EventType.Edit, EventType.Activate
				ShowDialog("edit")
		End Select
	End Sub

	Dim ilacfkod, ilacfadi, ilactkod, ilactadi, ist1, patent As Input

	Public Overrides Sub DialogEvent(e As ProcessEventArgs)
		Select Case e.EventType
			Case EventType.Initialize
				Modal.Start("Yeni ilaç tanımı", "İlaç bilgilerini girin.")
				ilacfkod = Modal.AddText("ilacfkod", "Formül kodu", "nl;width=8")
				ilacfadi = Modal.AddText("ilacfadi", "Etken madde", "nl;width=36")
				ilactkod = Modal.AddText("ilactkod", "Ticari kodu", "nl;width=8")
				ilactadi = Modal.AddText("ilactadi", "Ticari ismi", "nl;width=36")
				ist1 = Modal.AddCombo("ist1", "Kullanım türü", "AMP|Ampül,DRJ|Draje,CAPS|Kapsül,CRM|Krem,POM|Pomat,SYR|Şurup,TAB|Tablet", "nl;width=8")
				patent = Modal.AddCombo("patent", "Patent ülkesi", "K|Kıbrıs,T|Türkiye,Y|Yabancı", "nl;width=8")
				Modal.AddList("List", 480, 160)
				Modal.List.AddColumns("*barkod(Barkod;100%l)")
			Case EventType.Shown
				If Modal.Name = "edit" Then
					Rs = Saglik.Ilac.Oku(Remote, List.SelectedRow("ilactkod"))
					Modal.SetValues("ilacfkod,ilacfadi,ilactkod,ilactadi,ist1,patent", Rs("ilacfkod"), Rs("ilacfadi"), Rs("ilactkod"), Rs("ilactadi"), Rs("ist1"), Rs("patent"))
					ilacfkod.Enabled = False
					Rs = Saglik.Ilac.BarkodOku(Remote, List.SelectedRow("ilactkod"))
					Modal.List.DataSource = Rs
					Modal.List.AllowNewRow = True
					Modal.List.ShowLineNumbers = True
				End If
				Modal.Buttons.Show("Save")
			Case EventType.ValidateInput
				If e.Name = "ilacfkod" AndAlso Modal.Name = "add" AndAlso Not ilacfkod.IsEmpty Then
					Dim Row = (From r In List.Rows Where Trim(IsNull(r.Cells("ilacfkod").Value, "")) = ilacfkod.Get).FirstOrDefault
					If Not Row Is Nothing Then
						List.HighlightRow(Row.Index)
						Modal.Name = "edit"
						Modal.FireEvent(EventType.Shown)
					End If
				End If
			Case EventType.Save
				If Modal.Check("ilacfkod", Not IsValidCode(ilacfkod.Get), "Formül kodu geçerli değil.") Then Return
				If Modal.Check("ilacfadi", ilacfadi.IsEmpty, "Formül adının girilmesi gerekir.") Then Return
				If Modal.Check("ilacfkod", Mid(ilacfkod.Get, 1, 1) <> Mid(ilacfadi.Get, 1, 1), "Formül kodu formül adıyla uyumlu değil.") Then Return
				If Modal.Check("ilactkod", Not IsValidCode(Modal.Input("ilactkod")), "Ticari kodu geçerli değil.") Then Return
				If Modal.Check("ilactadi", ilactadi.IsEmpty, "Ticari adının girilmesi gerekir.") Then Return
				If Modal.Check("ilactkod", Mid(ilactkod.Get, 1, 1) <> Mid(ilactadi.Get, 1, 1), "Ticari kodu ticari adıyla uyumlu değil.") Then Return
				Dim barkodlar As New List(Of String)
				For Each Row In Modal.List.Rows
					Dim barkod = Trim(Row.Cells("barkod").Value)
					If barkod <> "" Then
						If Not IsValidBarcode(barkod) Then
							Modal.List.HighlightRow(Row.Index)
							Warning("Geçerli bir barkod girmeniz gerekir.")
							List.Focus()
							List.BeginEdit(True)
							Return
						End If
						barkodlar.Add(barkod)
					End If
				Next
				If Not Confirm("İlaç kaydını onaylıyor musunuz?") Then Return
				Dim Result = Saglik.Ilac.Kaydet(Remote, ilactkod.Get, ilactadi.Get, ilacfkod.Get, ilacfadi.Get, ist1.Get, patent.Get, barkodlar, User.Kaykul)
				If Result.ErrorOccured Then Warning("Kayıt sırasında bir hata oluştu.", Result.ErrorMessage) : Return
				Modal.Close()
		End Select
	End Sub

	Function IsValidCode(Kod As String) As Boolean
		If Kod = Nothing Then Return False
		If Kod.Trim.Length <> 4 Then Return False
		If Kod.First < "A" Or Kod.First > "Z" Then Return False
		If Mid(Kod, 2, 3) <> Format(Val(Mid(Kod, 2, 3)), "000") Then Return False
		Return True
	End Function

	Function IsValidBarcode(Kod As String) As Boolean
		If Kod = Nothing Then Return False
		If Kod.Length <> 13 Then Return False
		Return True
	End Function

End Class
